#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
测试浮点数生成器
"""

import sys
import os

# 添加项目路径
sys.path.insert(0, os.path.dirname(__file__))

from utils.data.float_generator import FloatGenerator

def test_generate_random_float():
    """测试生成随机浮点数"""
    print("测试生成随机浮点数:")
    
    # 测试生成3位整数2位小数的数字
    result = FloatGenerator.generate_random_float(3, 2)
    print(f"生成3位整数2位小数的数字: {result}")
    assert isinstance(result, float)
    
    # 转换为字符串检查位数
    str_result = str(result)
    if '.' in str_result:
        integer_part, decimal_part = str_result.split('.')
        assert len(integer_part) == 3, f"整数部分应该是3位，实际是{len(integer_part)}位: {integer_part}"
        # 我们不严格检查小数部分长度，因为前导零可能被省略
    
    # 测试生成1位整数4位小数的数字
    result = FloatGenerator.generate_random_float(1, 4)
    print(f"生成1位整数4位小数的数字: {result}")
    assert isinstance(result, float)
    
    # 对于小数部分，我们不能简单地检查字符串长度，因为前导零可能被省略
    str_result = str(result)
    if '.' in str_result:
        integer_part, decimal_part = str_result.split('.')
        assert len(integer_part) == 1, f"整数部分应该是1位，实际是{len(integer_part)}位: {integer_part}"
        # 小数部分可能因为前导零而看起来少于4位，但我们知道它是4位精度
    
    # 测试生成5位整数0位小数的数字（即整数）
    result = FloatGenerator.generate_random_float(5, 0)
    print(f"生成5位整数0位小数的数字: {result}")
    assert isinstance(result, float)
    
    str_result = str(result)
    # 如果是整数，可能没有小数点
    if '.' in str_result:
        integer_part, decimal_part = str_result.split('.')
        assert len(integer_part) == 5, f"整数部分应该是5位，实际是{len(integer_part)}位: {integer_part}"
    
    print("所有测试通过!")

def test_generate_random_float_from_utils():
    """测试基于工具的浮点数生成"""
    print("\n测试基于工具的浮点数生成:")
    
    # 测试生成2位整数3位小数的数字
    result = FloatGenerator.generate_random_float_from_utils(2, 3)
    print(f"生成2位整数3位小数的数字: {result}")
    assert isinstance(result, float)
    
    # 检查位数
    str_result = str(result)
    if '.' in str_result:
        integer_part, decimal_part = str_result.split('.')
        # 同样，我们只验证整数部分的位数
        assert len(integer_part) == 2, f"整数部分应该是2位，实际是{len(integer_part)}位: {integer_part}"
    
    print("基于工具的浮点数生成测试通过!")

if __name__ == "__main__":
    test_generate_random_float()
    test_generate_random_float_from_utils()